
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>回调函数</title>
</head>
<body>
    

    <script>
        // 函数种类
        //     1普通函数 是基础,是演化其他类型函数的原型基础
        //     2构造函数 给对象做初始化
        //     3回调函数 处理异步任务结果的


         /*
            1.回调函数（异步任务有关系）:
            JS中的函数名本身就是变量，所以函数也可以作为值来使用。
            也就是说，不仅可以像传递参数一样把一个函数传递给另一个函数，
            而且可以将一个函数作为另一个函数的结果返回。

            js特点：
                单线程，
                任务：
                    同步：js主线程
                    异步：兄弟线程处理  微任务队列  宏任务队列
                事件循环
        */


        // 问题痛点：无法接取函数内部异步处理的结果
        function sum(a,b) {
            setTimeout(() => {
                console.log('触发了计算结果：')
                return a+b
            }, 2000);
        }


        let res = sum(1,2)
        console.log(res);
        

        // callback:回调函数，用来监听或者是接取异步任务处理的结果
        // function sum(a,b,callback) {
        //     setTimeout(() => {
        //         console.log('触发了计算结果：')
        //         let  count = a+b
        //         callback(count)
        //     }, 2000);
        // }


        // let res = sum(1,2,function (p) {
        //     console.log("处理的结果是："+p);
            
        // })
        
        

        //优化语法：
        // 函数
        // function sum(a,b,callback) {
        //     setTimeout(() => {
        //         console.log('触发了计算结果：')
        //         let  count = a+b
        //         callback(count)
        //     }, 2000);
        // }
        // // 函数  定义用于监听异步任务的函数
        // function addListen(p) {
        //     console.log("处理的结果是："+p);
        // }

        // // 调用函数
        // let res = sum(1,2,addListen)


    </script>
</body>
</html>